package com.sunny.blog.service;

import java.util.List;
import java.util.Set;

/**
 * @ClassName: ICacheService
 * @Description: 缓存服务接口
 * @Author: sunt
 * @Date: 2019/11/15 20:20
 * @Version 1.0
 **/
public interface ICacheService {

    /**
     * @Title: getCacheInfoByCode
     * @Description:通过key获取缓存信息
     * @param cacheKey
     * @return
     */
    String getCacheInfoByCode(String cacheKey);

    /**
     * @Title: cacheStringData
     * @Description:缓存字符串
     * @param cacheKey 缓存key
     * @param cacheValue 缓存值
     * @param timeout 缓存过期时间(分钟)
     */
    void cacheStringData(String cacheKey, String cacheValue, long timeout);

    /**
     * @Title: deleteCacheByKey
     * @Description:根据单个key删除
     * @param cacheKey
     * @return
     */
    Boolean deleteCacheByKey(String cacheKey);

    /**
     * @Title: deleteBatchCache
     * @Description:根据key模糊匹配删除
     * @param cacheKey
     * @return
     */
    Long deleteBatchCache(String cacheKey);

    /**
     * @Title: cacheObjData
     * @Description:缓存对象
     * @param cacheKey
     * @param cacheValue
     * @param timeout
     */
    void cacheObjData(String cacheKey, Object cacheValue, long timeout);

    /**
     * @Title: cacheObjData
     * @Description:缓存对象
     * @param cacheKey
     * @param cacheValue
     */
    void cacheObjData(String cacheKey, Object cacheValue);

    /**
     * @Title: getCacheInfoByCode
     * @Description:获取缓存对象
     * @param cacheKey
     * @return
     */
    Object getObjCacheByCode(String cacheKey);

    /**
     *
     * 列表添加
     * @param k
     * @param object
     */
    void lPush(String k, Object object);

    /**
     * 列表移除
     * @param k
     * @return
     */
    Object lPop(String k);

    /**
     * 回列表中指定区间内的元素
     * @param k
     * @param start  0 表示列表的第一个元素
     * @param end -1 表示列表的最后一个元素
     * @return
     */
    List<Object> lRange(String k, long start, long end);

    /**
     * 添加有序集合
     * @param key 缓存key
     * @param member 缓存内容
     * @param score 排序
     */
    void zAdd(String key, Object member, double score);

    /**
     * 有序集合获取
     * @param key
     * @param start
     * @param end
     * @return
     */
    Set<Object> zRange(String key, long start, long end);

    /**
     * 设置缓存过期时间
     * @param key 缓存key
     * @param timeout 秒
     * @return
     */
    boolean setExpire(String key, long timeout);

    /**
     * 移除有序集中的一个或多个成员，不存在的成员将被忽略
     * @param key
     * @param values
     * @return
     */
    Long zrem(String key, Object... values);

    /**
     * 递增
     * @param key
     * @return
     */
    Long incr(String key);

    /**
     * 清空数据
     * @return
     */
    Long flushAll();

    /**
     * 获取缓存信息
     * @return
     */
    Set<String> getCacheInfo();
}
